home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / newsgroups / misc.19981211-19990422 / 000424_news@watsun.cc.columbia.edu _Tue Mar 30 11:49:56 1999.msg < prev    next >
Internet Message Format  |  2020-01-01  |  6KB

  1. Return-Path: <news@watsun.cc.columbia.edu>
  2. Received: from newsmaster.cc.columbia.edu (newsmaster.cc.columbia.edu [128.59.59.30])
  3.     by watsun.cc.columbia.edu (8.8.5/8.8.5) with ESMTP id LAA08089
  4.     for <kermit.misc@watsun.cc.columbia.edu>; Tue, 30 Mar 1999 11:49:56 -0500 (EST)
  5. Received: (from news@localhost)
  6.     by newsmaster.cc.columbia.edu (8.8.5/8.8.5) id LAA13704
  7.     for kermit.misc@watsun.cc.columbia.edu; Tue, 30 Mar 1999 11:43:29 -0500 (EST)
  8. X-Authentication-Warning: newsmaster.cc.columbia.edu: news set sender to <news> using -f
  9. From: dn5006@my-dejanews.com
  10. Subject: Container in C-Kermit/Kermit 95
  11. Date: Tue, 30 Mar 1999 16:05:25 GMT
  12. Organization: Deja News - The Leader in Internet Discussion
  13. Message-ID: <7dqsnu$m0v$1@nnrp1.dejanews.com>
  14. To: kermit.misc@watsun.cc.columbia.edu
  15.  
  16. ; CONTAINER IS A KEY CONCEPT IN OBJECT-ORIENTED PROGRAMMING.
  17. ; SMALLTALK, C++, etc. HAVE STANDARD LIBRARIES OF CONTAINERS.
  18. ; THE FOLLOWING SCRIPT DEFINES THE CLASS BASKET IN C-KERMIT/KERMIT 95.
  19. ; BASKET OFFERS A RICH USAGE INTERFACE:
  20. ;
  21. ; basket basket_name
  22. ;          create a new object identified as basket_name.
  23. ;
  24. ; basket_name.set key value
  25. ;          deposit into the object basket_name the element
  26. ;           identified by 'key' that has the content 'value'.
  27. ;           Both key and value can be alpha, numeric, alpha-numeric.
  28. ;
  29. ; basket_name.get key
  30. ;          query the element identified by 'key'.
  31. ;
  32. ; basket_name.size
  33. ;          query the number of the elements in the basket_name.
  34. ;
  35. ; basket_name.head
  36. ;          position to the first element of the basket for query.
  37. ;
  38. ; basket_name.tail
  39. ;          position to the last element of the basket for query.
  40. ;
  41. ; basket_name.pairs
  42. ;          query all the pairs key => value in the basket_name.
  43. ;
  44. ; basket_name.step_pair
  45. ;          query each pair key => value in the basket_name.
  46. ;
  47. ; basket_name.values
  48. ;          query all the values in the basket_name.
  49. ;
  50. ; basket_name.step_value
  51. ;          query each value in the basket_name.
  52. ;
  53. ; basket_name.keys
  54. ;          query all the keys in the basket_name.
  55. ;
  56. ; basket_name.step_key
  57. ;          query each key in the basket_name.
  58. ;
  59. ; basket_name.reset
  60. ;          remove all the elements in the basket_name.
  61. ;
  62. ; basket_name.destroy
  63. ;          remove the basket_name itself.
  64.  
  65. define basket {
  66.     local self
  67.  
  68.     assign self \%1
  69.     _assign \m(self)_size 0
  70.     _assign \m(self)_value 0
  71.     _assign \m(self)_key 0
  72.  
  73.     _define \m(self).set {
  74.         local \%s \%i
  75.         if NOT define \%1 end 1 ... missing 1.param
  76.         if NOT define \%2 end 1 ... missing 2.param
  77.         assign \%s \fbreak(\v(macro),.)
  78.         xif NOT defined \m(\%s_value[\%1]) {    ; key not yet used?
  79.             assign \%i \m(\%s_size)        ; get previous key index
  80.             increment \%i            ; make next key index
  81.             _assign \%s_size \%i        ; save this key index
  82.             _assign \%s_key[\%i] \%1    ; save key
  83.         }
  84.         _assign \%s_value[\%1] \%2        ; save value
  85.         echo \m(\%s_value[\%1])
  86.     }
  87.  
  88.     _define \m(self).get {
  89.         local \%s
  90.         assign \%s \fbreak(\v(macro),.)
  91.         echo \m(\%s_value[\%1])
  92.         return \m(\%s_value[\%1])
  93.     }
  94.  
  95.     _define \m(self).step_value {
  96.         local \%s \%i \%k \%r \%n \%m
  97.  
  98.         assign \%s \fbreak(\v(macro),.)
  99.  
  100.         assign \%m \m(\%s_size)
  101.         assign \%n \m(\%s_value)
  102.  
  103.         assign \%n \feval(\fmod(\%n, \%m) + 1)
  104.         _assign \%s_value \%n
  105.  
  106.         assign \%k \m(\%s_key[\%n])
  107.         assign \%r \m(\%s_value[\%k])
  108.  
  109.         echo \m(\%s_value[\%k])
  110.         return \m(\%s_value[\%k])
  111.     }
  112.  
  113.     _define \m(self).step_pair {
  114.         local \%s \%i \%k \%r \%n \%m
  115.  
  116.         assign \%s \fbreak(\v(macro),.)
  117.  
  118.         assign \%m \m(\%s_size)
  119.         assign \%n \m(\%s_value)
  120.         assign \%n \feval(\fmod(\%n, \%m) + 1)
  121.         _assign \%s_value \%n
  122.  
  123.         assign \%k \m(\%s_key[\%n])
  124.         assign \%r \m(\%s_value[\%k])
  125.  
  126.         echo \%k => \%r
  127.         return \%k => \%r
  128.     }
  129.  
  130.     _define \m(self).pairs {
  131.         local \%s \%i \%k \%r \%n \%m \%z
  132.  
  133.         assign \%s \fbreak(\v(macro),.)
  134.  
  135.         for \%i 1 \m(\%s_size) 1 {
  136.             assign \%k \m(\%s_key[\%i])
  137.             assign \%v \m(\%s_value[\%k])
  138.             assign \%z \%z\%k => \%v\v(newline)
  139.             echo \%k => \%v
  140.         }
  141.  
  142.         return \%z
  143.     }
  144.  
  145.  
  146.     _define \m(self).size {
  147.         local \%s
  148.         assign \%s \fbreak(\v(macro),.)
  149.         echo \m(\%s_size)
  150.         return \m(\%s_size)
  151.     }
  152.  
  153.     _assign \m(self).head {
  154.         _assign \m(self)_value 0
  155.         _assign \m(self)_key 0
  156.     }
  157.  
  158.     _define \m(self).tail {
  159.         local \%s \%t
  160.         assign \%s \fbreak(\v(macro),.)
  161.         assign \%t \m(\%s_size)
  162.         _assign \%s_value \feval(\%t - 1)
  163.         _assign \%s_key \feval(\%t - 1)
  164.     }
  165.  
  166.     _define \m(self).reset {
  167.         local \%s
  168.         assign \%s \fbreak(\v(macro),.)
  169.         for \%i 1 \m(\%s_size) 1 {
  170.             assign \%k \m(\%s_key[\%i])
  171.             _define \%s_key[\%i]
  172.             _define \%s_value[\%k]
  173.         }
  174.         _assign \%s_size 0
  175.         _assign \%s_value 0
  176.         _assign \%s_key 0
  177.     }
  178.  
  179.     _define \m(self).step_key {
  180.         local \%s \%i \%k \%r \%n \%m
  181.  
  182.         assign \%s \fbreak(\v(macro),.)
  183.  
  184.         assign \%m \m(\%s_size)
  185.         assign \%n \m(\%s_key)
  186.  
  187.         assign \%n \feval(\fmod(\%n, \%m) + 1)
  188.         _assign \%s_key \%n
  189.  
  190.         assign \%k \m(\%s_key[\%n])
  191.  
  192.         echo \%k
  193.         return \%k
  194.  
  195.     }
  196.  
  197.     _define \m(self).keys {
  198.         local \%s \%z
  199.         assign \%s \fbreak(\v(macro),.)
  200.         for \%i 1 \m(\%s_size) 1 {
  201.             assign \%k \m(\%s_key[\%i])
  202.             assign \%z {\%z\%k }
  203.         }
  204.         echo \%z
  205.         return \%z
  206.     }
  207.  
  208.     _define \m(self).values {
  209.         local \%s \%z \%v
  210.         assign \%s \fbreak(\v(macro),.)
  211.         for \%i 1 \m(\%s_size) 1 {
  212.             assign \%k \m(\%s_key[\%i])
  213.             assign \%v \m(\%s_value[\%k])
  214.             assign \%z {\%z\%v }
  215.         }
  216.         echo \%z
  217.         return \%z
  218.     }
  219.  
  220.     _define \m(self).destroy {
  221.         local \%s \%n \%i \%v \%k
  222.         assign \%s \fbreak(\v(macro),.)
  223.  
  224.         \%s.reset
  225.  
  226.         _define \%s_size
  227.         _define \%s_value
  228.  
  229.         _define \%s.size
  230.         _define \%s.set
  231.         _define \%s.get
  232.         _define \%s.head
  233.         _define \%s.pairs
  234.         _define \%s.step_pair
  235.         _define \%s.tail
  236.         _define \%s.reset
  237.         _define \%s.step_key
  238.         _define \%s.keys
  239.         _define \%s.step_value
  240.         _define \%s.values
  241.         _define \%.destroy
  242.  
  243.     }
  244. }
  245.  
  246.  
  247.  
  248. Dat Nguyen
  249. Airline Telecommunications and Information Services
  250. 770 Sherbrooke West
  251. Montreal, Quebec
  252. Canada H3A 1G1
  253. Email dat.nguyen&sita.int
  254.  
  255. -----------== Posted via Deja News, The Discussion Network ==----------
  256. http://www.dejanews.com/       Search, Read, Discuss, or Start Your Own